package tp.controller.parserXML;

import java.io.FileReader;
import java.util.Enumeration;
import java.util.Hashtable;

import tp.controller.Controlador;
import tp.controller.parserXML.qdxml.DocHandler;
import tp.controller.parserXML.qdxml.QDParser;
import tp.model.*;

/**
 * This class is the most basic possible implementation of the DocHandler class.
 * It simply reports all events to System.out as they occur.
 */
public class LectorDeNivel implements DocHandler {

	// We only instantiate one copy of the DocHandler
	static LectorDeNivel lectorDeNivel = new LectorDeNivel();

	// Implementation of DocHandler is below this line
	public void startDocument() {
		//System.out.println("  start document");
	}

	public void endDocument() {
		//System.out.println("  end document");
	}

	public void startElement(String elem, Hashtable h) {
		//System.out.println("    start elem: " + elem);
		Enumeration e = h.keys();
		Chocable elemChoc = null;
		int posX = 0;
		int posY = 0;
		int DirX = 0;
		int DirY = 0;
		while (e.hasMoreElements()) {
			String key = (String) e.nextElement();
			String val = (String) h.get(key);
			//System.out.println("      " + key + " = " + val);
			// Enumeration e = h.keys();
			// while(e.hasMoreElements()) {
			// String key = (String)e.nextElement();
			// String val = (String)h.get(key);
			if (key.equalsIgnoreCase("Tipo")) {
				elemChoc = CrearTipo(val);
			} else if (key.equalsIgnoreCase("PosX")) {
				posX = Integer.parseInt(val);
			} else if (key.equalsIgnoreCase("PosY")) {
				posY = Integer.parseInt(val);
			} else if (key.equalsIgnoreCase("DireccionX")) {
				DirX = Integer.parseInt(val);
			} else if (key.equalsIgnoreCase("DireccionY")) {
				DirY = Integer.parseInt(val);
			}
		}
		if ((posX != 0) || (posY != 0)) {
			elemChoc.setMiPosicion(new Posicion(posX, posY));
		}
		if ((DirX != 0) || (DirY != 0)) {
			elemChoc.setMiDireccion(DirX, DirY);
		}
	}

	public void endElement(String elem) {
		//System.out.println("    end elem: " + elem);
	}

	public void text(String text) {
		//System.out.println("        text: " + text);
	}

	public static void correr(String archiv) throws Exception {
		reportOnFile(archiv);
	}

	public static void reportOnFile(String file) throws Exception {
		//System.out.println("===============================");
		//System.out.println("file: " + file);

		// This is all the code we need to parse
		// a document with our DocHandler.
		FileReader fr = new FileReader(file);
		QDParser.parse(lectorDeNivel, fr);

		fr.close();
	}

	private Chocable CrearTipo(String val) {
		if (val.equalsIgnoreCase("LadrilloAzul")) {
			return new LadrilloAzul(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloDorado")) {
			return new LadrilloDorado(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloNaranja")) {
			return new LadrilloNaranja(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloCeleste")) {
			return new LadrilloCeleste(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloBlanco")) {
			return new LadrilloBlanco(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloGris")) {
			return new LadrilloGris(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloPlateado")) {
			return new LadrilloPlateado(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloRosa")) {
			return new LadrilloRosa(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloVerde")) {
			return new LadrilloVerde(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloRojo")) {
			return new LadrilloRojo(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("LadrilloMarron")) {
			return new LadrilloMarron(new Posicion(0, 0));
		}
		if (val.equalsIgnoreCase("Bola")) {
			return new Bola();
		}
		if (val.equalsIgnoreCase("Nave")) {
			Nave nave = new Nave(null, null);
			Controlador.controlador.setNave(nave);
			return nave;
		}
		if (val.equalsIgnoreCase("BordeDerecho")) {
			return new BordeDerecho(null, null);
		}
		if (val.equalsIgnoreCase("BordeIzquierdo")) {
			return new BordeIzquierdo(null, null);
		}
		if (val.equalsIgnoreCase("BordeSuperior")) {
			return new BordeSuperior(null, null);
		}
		if (val.equalsIgnoreCase("BordeInferior")) {
			return new BordeInferior(null, null);
		}
		return null;
	}
}

// package tp.controller.parserXML;
//
// import tp.model.*;
//
// import java.io.FileReader;
// import java.util.Enumeration;
// import java.util.Hashtable;
//
// import tp.controller.Controlador;
// import tp.controller.parserXML.qdxml.*;
//
// public class LectorDeNivel implements DocHandler {
//
// public LectorDeNivel(String NomNivel)throws Exception{
// FileReader fr = new FileReader(NomNivel);
// QDParser.parse(this,fr);
// fr.close();
// }
//	
// public void endDocument() throws Exception {
// // TODO Auto-generated method stub
//		
// }
//
// public void endElement(String tag) throws Exception {
// // TODO Auto-generated method stub
//		
// }
//
// public void startDocument() throws Exception {
// // TODO Auto-generated method stub
//		
// }
//
// public void startElement(String tag, Hashtable h) throws Exception {
// Chocable elem = null;
// int posX = 0;
// int posY = 0;
// int DirX = 0;
// int DirY = 0;
// Enumeration e = h.keys();
// while(e.hasMoreElements()) {
// String key = (String)e.nextElement();
// String val = (String)h.get(key);
// if (key == "Tipo"){
// elem = CrearTipo(val);
// }else if(key == "PosX"){
// posX = Integer.parseInt(val);
// }else if(key == "PosY"){
// posY = Integer.parseInt(val);
// }else if(key == "DireccionX"){
// DirX = Integer.parseInt(val);
// }else if(key == "DireccionY"){
// DirY = Integer.parseInt(val);
// }
// }
// if ((posX!=0)||(posY!=0)){
// elem.setMiPosicion(new Posicion(posX, posY));
// }
// if ((DirX!=0)||(DirY!=0)){
// elem.setMiDireccion(DirX, DirY);
// }
// }
//
// private Chocable CrearTipo(String val) {
// if (val=="LadrilloAzul"){
// return new LadrilloAzul(new Posicion(0,0));
// }
// if (val=="LadrilloDorado"){
// return new LadrilloDorado(new Posicion(0,0));
// }
// if (val=="LadrilloNaranja"){
// return new LadrilloNaranja(new Posicion(0,0));
// }
// if (val=="LadrilloCeleste"){
// return new LadrilloCeleste(new Posicion(0,0));
// }
// if (val=="LadrilloBlanco"){
// return new LadrilloBlanco(new Posicion(0,0));
// }
// if (val=="LadrilloGris"){
// return new LadrilloGris(new Posicion(0,0));
// }
// if (val=="LadrilloPlateado"){
// return new LadrilloPlateado(new Posicion(0,0));
// }
// if (val=="LadrilloRosa"){
// return new LadrilloRosa(new Posicion(0,0));
// }
// if (val=="LadrilloVerde"){
// return new LadrilloVerde(new Posicion(0,0));
// }
// if (val=="LadrilloRojo"){
// return new LadrilloRojo(new Posicion(0,0));
// }
// if (val=="LadrilloMarron"){
// return new LadrilloMarron(new Posicion(0,0));
// }
// if (val=="Bola"){
// return new Bola();
// }
// if (val=="Nave"){
// Nave nave = new Nave(null, null);
// Controlador.controlador.setNave(nave);
// return nave;
// }
// if (val=="BordeDerecho"){
// return new BordeDerecho(null, null);
// }
// if (val=="BordeIzquierdo"){
// return new BordeIzquierdo(null, null);
// }
// if (val=="BordeSuperior"){
// return new BordeSuperior(null, null);
// }
// if (val=="BordeInferior"){
// return new BordeInferior(null, null);
// }
// return null;
// }
//
// public void text(String str) throws Exception {
// // TODO Auto-generated method stub
//		
// }
// }
